<?php
class Rotina extends Zend_Db_Table
{
	protected $_name = "rotina";
	
        
	public function lista(array $request)
	{
		$dados = array();
		
                $select = $this->select()
			       ->from($this, 'COUNT(*) AS qtd')
			       ->where("situacao_rotina <> ? ",'L');
                
		$result = $this->fetchRow($select);
                
		
                if($result->qtd > 0){
			$total_pages = ceil($result->qtd / $request['rows']);
		}else{
			$total_pages = 0;
		
                        
                }
		
		
		if($request['page'] == 1){
			$start = 0;
		}else{
			$start = ($request['rows'] * $request['page']) - $request['rows'];
		}

		$dados['total']	= $total_pages;
		$dados['page']	= $request['page'];
		$dados['records'] = $result->qtd;

		 $select =  "SELECT r.idRotina, r.dataRotina, ";
                 $select .= "      uc.nome AS UsuarioCadastro,r.dataCadastro, ";
                 $select .= " (Select count(distinct a.idAmostra) from rotina_amostra a ";
                 $select .= "  where a.idRotina = r.idRotina ) as TolAmostra,";
                 $select .= " (Select count(distinct a.idExame) from  Rotina_amostra a   ";
                 $select .= " where a.idRotina = r.idRotina ) as TolExame";
                 $select .= " FROM rotina r";
                 $select .= "     INNER JOIN usuario uc ON ( r.idUsuCad = uc.idUsuario )";
                 $select .= "     LEFT JOIN usuario ua ON ( r.idUsuAtu = ua.idUsuario )";
                 $select .= "WHERE r.situacao_rotina <> 'L'";
		 
		if($request['sidx'])
		{
				$select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'] ;
		}
		else
		{
				$select .=  " LIMIT " . $start ." , ". $request['rows'] ;
			
		}
                
		$rotina =  $this->_db->fetchAll($select);
                
              
		for ($cont = 0; $cont < count($rotina); $cont++)
		{
			$dados['rows'][$cont]['id'] =  $rotina[$cont]['idRotina'];
			$dados['rows'][$cont]['cell'] =  array( $rotina[$cont]['idRotina'],
								$rotina[$cont]['dataRotina'],
								$rotina[$cont]['UsuarioCadastro'],
                                                                $rotina[$cont]['dataCadastro'],
                                                                $rotina[$cont]['TolAmostra'],
								$rotina[$cont]['TolExame']
                                                                				   );
		
		}
			
		return $dados;
	}
        
       public function getRotina(array $request)
    {
        $dados = array();
		
            $select = $this->select()
			       ->from($this, 'COUNT(*) AS qtd')
                               ->where("situacao_rotina = ? ",'P');
                
		$result = $this->fetchRow($select);

        if($result->qtd > 0){
            $total_pages = ceil($result->qtd / $request['rows']);
        }else{
            $total_pages = 0;
        }

        if($request['page'] == 1){
            $start = 0;
        }else{
            $start = ($request['rows'] * $request['page']) - $request['rows'];
        }

        $dados['total']	= $total_pages;
        $dados['page']	= $request['page'];
        $dados['records'] = $result->qtd;
        
        $select =  "SELECT DISTINCT ro.idRotina, date_format( ro.dataRotina, '%d/%m/%Y' ) AS dataRotina,";
        $select .= " (SELECT COUNT(DISTINCT ra.idAmostra) FROM rotina_amostra ra ";
        $select .= " WHERE ra.idRotina = ro.idRotina) AS tolAmostra,";
        $select .= " (SELECT COUNT(DISTINCT ra.idExame) FROM  rotina_amostra ra ";
        $select .= " WHERE ra.idRotina = ro.idRotina) AS tolExame,";
        $select .= " (SELECT COUNT(re.resposta) FROM  resultado re ";
        $select .= " WHERE re.idRotina = ro.idRotina AND re.resposta IN ('P', 'N', 'I', 'R')) AS tolResultado";
        $select .= " FROM rotina ro";
        $select .= ' WHERE ro.situacao_rotina = "P"';
        
        if($request['sidx']){
            $select .= " ORDER BY " . $request['sidx']  . " " . $request['sord'] . " LIMIT " . $start ." , ". $request['rows'];
        }else{
            $select .=  " LIMIT " . $start ." , ". $request['rows'] ;
        }

        $resultado =  $this->_db->fetchAll($select);

        for ($cont = 0; $cont < count($resultado); $cont++)
        {
            $dados['rows'][$cont]['id'] =  $resultado[$cont]['idRotina'];
            $dados['rows'][$cont]['cell'] =  array( $resultado[$cont]['idRotina'],
                                                    $resultado[$cont]['dataRotina'],
                                                    $resultado[$cont]['tolAmostra'],
                                                    $resultado[$cont]['tolExame'],
                                                    $resultado[$cont]['tolResultado']
                                                  );
        }

        return $dados;
    }
    
     public function delRotina($idRotina){//excluir a rotina caso a amostra seja única
        $where = $this->    _db->quoteInto("idRotina = ?", $idRotina);
        return $this->delete($where);
     }
     
    public function possoLiberar($idRotina)
    {
        $retorno = true;
        $select = $this->select()
                         ->from('rotina')
                         ->where('idRotina = ?', $idRotina);
        $resultado = $this->fetchRow($select);
        
        if($resultado->situacao_rotina == 'C')
        {
            $retorno =true;
        }
        else
        {
            $retorno = false;
        }
        return $retorno;
    }
     
    public function libRotina($idRotina, $idUsuBio, $idUsuAux)
    {
        $retorno = true;
        $this->_db->beginTransaction();
        try
        {
            $dadosLiberacao = array(
                'idRotina' => $idRotina,
                'dataLiberacao' => date('y-m-d'),
                'idUsuBio' => $idUsuBio,
                'idUsuAux' => $idUsuAux
            );
            
            $insert = $this->_db->quoteInto(" INSERT liberacao_rotina (idRotina,dataLiberacao,idUsuBio,idUsuAux) VALUES (?)",$dadosLiberacao);
            
            $this->_db->query($insert);
            
            $dadosRotina = array(
                'situacao_rotina' => 'L',
                'idUsuAtu' => $idUsuBio,
                'dataAtualiza' => date('y-m-d')
            );
           
            $selectLib = "Select idLiberacaoRotina from Liberacao_rotina where idRotina = ". $idRotina;
            $resultado = $this->_db->fetchRow($selectLib);
            
            
            $where = $this->getAdapter()->quoteInto("idRotina = ?", $idRotina);
            $result_update =  $this->update($dadosRotina, $where);
            
                        
            
            $this->_db->commit();
            
            return $resultado;
         }
        catch (Zend_Exception $e)
        {
            $this->_db->rollBack();
            $retorno = false;
        }
        
    }
    
    //excluir a rotina, rotina_amostra e resultado caso não exita nenhum resultado para ela
    public function deletarRotina($idRotina)
    {
        $retorno = true;
        $this->_db->beginTransaction();
        try {
            $resultado = new Resultado();
            if($resultado->deletarResultado($idRotina)){
                $rotinaAmostra = new RotinaAmostra();
                if($rotinaAmostra->delRotinaAmostra($idRotina))
                {
                    $where = $this->getAdapter()->quoteInto("idRotina = ?", $idRotina);
                    $res = $this->delete($where);
                    $this->_db->commit();
                }
                else{
                    $retorno = false;
                }
            }
        } catch (Exception $e) {
            $this->_db->rollBack();
            $retorno = false;
        }
        return $retorno;
    }
    
    public function concluirRotina($idRotina, $usuario)
    {
        $retorno = true;
        $this->_db->beginTransaction();
        try {
            $select = "SELECT CASE WHEN t1.qtd =  t2.qtd THEN 'IGUAL'";
            $select .= " ELSE 'DIFERENTE' END VALOR FROM";
            $select .= " (SELECT DISTINCT COUNT(idResultado) AS qtd FROM Resultado WHERE resposta <> ''";
            $select .= $this->getAdapter()->quoteInto(" AND idRotina = ?)t1,", $idRotina);
            $select .= " (SELECT COUNT(idResultado) AS qtd FROM Resultado";
            $select .= $this->getAdapter()->quoteInto(" WHERE idRotina = ?)t2", $idRotina);
            
            $resultado = $this->_db->fetchAll($select);

            if($resultado[0]['VALOR'] != 'IGUAL'){
                $retorno = false;
            }
            else{
                $dados = array(
                        'situacao_rotina' => 'C',
                        'idUsuAtu' => $usuario,
                        'dataAtualiza'=> date('y-m-d')
                        );
                $where = $this->getAdapter()->quoteInto("idRotina = ?", $idRotina);
                $ret = $this->update($dados, $where);
                $this->_db->commit();
            }
        } catch (Exception $e) {
            $this->_db->rollBack();
            $retorno = false;
        }
        return $retorno;
    }
   
    
    public function getliberacao($idRotina)
    {
        $select = $this->_db->select()
                         ->from('liberacao_rotina')
                         ->where('idRotina = ?', $idRotina);
        $resultado = $this->_db->fetchAll($select);
        return $resultado;
    }
    
    public function getClienteRotina($idRotina)
    {
         $select = $this->_db->select()
                           ->distinct('amostra.idCliente')
                           ->from('rotina_amostra')
                           ->join('amostra','rotina_amostra.idAmostra = amostra.idAmostra','amostra.idCliente')
                           ->where('idRotina = ?', $idRotina);
        $resultado = $this->_db->fetchAll($select);
        return $resultado;
    }
    
}